package com.congee02.spring.core;

import java.io.Serializable;
import java.lang.reflect.*;

/**
 * @author congee(congee02 @ 163.com)
 * @date 1/28/2023 4:36 PM
 */
final class SerializableTypeWrapper {
    
    private static final Class<?>[] SUPPORTED_SERIALIZABLE_TYPES = {
            GenericArrayType.class, ParameterizedType.class, TypeVariable.class, WildcardType.class    
    };
    
    // todo
//    static final ConcurrentReferenceHashMap
    
    
    interface SerializeTypeProxy {
    }

    /**
     * 提供对 {@link Type} 的访问的 {@link Serializable} 接口。
     */
    @SuppressWarnings("serial")
    interface TypeProvider extends Serializable {
        /**
         * 返回（可能是非 {@link Serializable}）的 {@link Type}。
         */
        Type getType();

        /**
         * 返回类型的来源，如果不知道则返回 {@code null}。默认实现返回 {@code null}。
         */
        default Object getSource() {
            return null;
        }
    }

    /**
     * {@link Serializable} {@link InvocationHandler} 被代理的 {@link Type} 使用。
     * 提供序列化支持并增强任何返回 {@code Type} 或 {@code Type[]} 的方法。
     */
    @SuppressWarnings("serial")
    private static class TypeProxyInvocationHandler implements InvocationHandler, Serializable {
        
        private final TypeProvider provider;

        private TypeProxyInvocationHandler(TypeProvider provider) {
            this.provider = provider;
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            
            switch (method.getName()) {
                case "equals":
                    // todo
            }
            
            return null;
        }
    }
    
}
